<script>
	import Vue from 'vue';
	import md5Libs from "uview-ui/libs/function/md5";
	// import amapFile from './libs/amap-wx1.js'
	// #ifdef APP-PLUS
	import Aegis from 'aegis-weex-sdk';
	import config from '@/common/config/config.js'
	// #endif
	var iosSessionId = 0;
	// 首先需要通过 uni.requireNativePlugin("ModuleName") 获取 module 
	let socketID;
	// 腾讯IM
	// // 如果您已集成 v2.x 的 SDK，想升级到 V3 并且想尽可能地少改动项目代码，可以继续沿用 TIM
	// // import TIM from '@tencentcloud/chat';
	// import TencentCloudChat from '@tencentcloud/chat';
	// import TIMUploadPlugin from 'tim-upload-plugin';
	// // 注意！uni_modules/TencentCloud-Push 引入只适用于 uni-app -> native app 项目集成推送能力。
	// // import * as Push from '@/uni_modules/TencentCloud-Push';
	// // 注意！@tencentcloud/react-native-push 引入只适用于 react-native -> native app 项目集成推送能力。
	// // import Push from '@tencentcloud/react-native-push';
	// 腾讯IM

	



	export default {
		globalData: {
			inspectList: [],
			insuranceStr: {}
		},
		data() {
			return {
				// 地图
				amapPlugin: null,
				key: '0fd25b39ca0d4fd04da1cb5fd08db15a',
				timer: null
			}
		},
		
		onLaunch() {
			// 仅首次打开一次性加载数据
			this.$store.dispatch('common/init');
			// 同步购物车 本地 & 网络
			this.$store.dispatch('cart/get');
			// 同步 动态数据
			this.$store.dispatch('statistics/get');

			// this.$store.commit('getCity', '')
			const res = wx.getWindowInfo()
			var statusbarH = res.statusBarHeight
			this.$store.commit('getHeight', statusbarH)
			// 定位
			// this.amapPlugin = new amapFile.AMapWX({
			// 	key: this.key
			// });
			// this.connect()
			//腾讯云前端监控
			// #ifdef APP-PLUS
			const projectName = 'uniappApiExampleExt';
			uni.$aegis = new Aegis({
				id: 'iHWefAYqWuCkDjhucc',
				spa: true,
				reportApiSpeed: true,
				reportAssetSpeed: true,
				pagePerformance: true,
				hostUrl: 'https://tamaegis.com',
			});
			uni.$uploadToTAM = (eventString, sdkAppId) => {
				uni.$aegis.reportEvent({
					name: eventString.split('#')[0] || '',
					ext1: eventString,
					ext2: projectName,
					ext3: sdkAppId,
				});
			};
			uni.$createTrtcCloudUpload = sdkAppId => uni.$uploadToTAM('createTrtcCloud', sdkAppId);
			uni.$enterRoomSuccessUpload = sdkAppId => uni.$uploadToTAM('enterRoom-success', sdkAppId);
			uni.$enterRoomFailedUpload = (sdkAppId, errorMsg) => uni.$uploadToTAM(`enterRoom-failed#error: ${errorMsg}`,
				sdkAppId);
			uni.$onErrorUpload = (sdkAppId, errorMsg) => uni.$uploadToTAM(`onError-failed#error: ${errorMsg}`, sdkAppId);
			uni.$startLocalPreviewUpload = sdkAppId => uni.$uploadToTAM('startLocalPreview', sdkAppId);
			uni.$startRemoteViewSuccessUpload = sdkAppId => uni.$uploadToTAM('startRemoteView-success', sdkAppId);
			uni.$startRemoteViewFailedUpload = (sdkAppId, errorMsg) => uni.$uploadToTAM(
				`startRemoteView-failed#error: ${errorMsg}`, sdkAppId);
			// #endif



			// IM
			var that = this
			// #ifdef APP-PLUS
			//监听用户点击通知栏的通知
			plus.push.addEventListener('click', function(msg) {
				// console.log('用户点击了', msg)
				// 安卓离线通知被点击可能会触发两次click,第一次的msg.payload为莫名obj
				if ((msg.payload && Object.prototype.toString.call(msg.payload) !== '[object Object]') ||
					iosSessionId) {
					//处理有效点击
					let messageShow = () => {
						let sessionId = (iosSessionId ? iosSessionId : msg.payload) // 优先用 iOS 存储的 ID
						if (parseInt(sessionId) == 0) {
							uni.navigateTo({
								url: '/pages/common/message/message' // 跳转到消息列表
							})
							return;
						}
						uni.navigateTo({
							url: '/pages/common/session-info/session-info?id=' + sessionId // 跳转到会话详情
						})
					}
					// 当前页面判断
					let pages = getCurrentPages(),
						page = pages[pages.length - 1]
					if (page && page.route == 'pages/common/message/message') {
						messageShow() // 直接跳转
					} else {
						that.ws.messageReady = messageShow // 缓存跳转函数
					}
				}
			}, false)
			//获取设备平台
			let platform = that.ws.userPlatform ? that.ws.userPlatform : uni.getDeviceInfo().platform
			//仅 iOS 处理透传消息
			if (platform == 'ios') {
				plus.push.addEventListener("receive", function(msg) {
					//过滤无效消息
					if ('ignore' == msg.payload) {

					} else {
						//接收透传消息
						iosSessionId = msg.payload;
						plus.push.createMessage(msg.content, 'ignore', {
							title: msg.title,
							cover: false
						});
					}
				}, false);
			}
			// #endif
			//监听网络状态
			uni.onNetworkStatusChange(function(res) {
				//网络恢复时的逻辑
				if (res.isConnected) {
					const userinfo = uni.getStorageSync('wanlshop:user').im; // 从缓存读取用户信息
					if (userinfo) {
						that.ws.init(userinfo.token, userinfo.auth_token) // 重新初始化 WebSocket
					}
				} else {
					//断网时的逻辑
					that.ws.socketTask.close() // 主动关闭 WebSocket 连接
					that.ws.socketOpen = false // 标记连接状态为 false
					that.ws.checkNetwork() // 检查网络（可能包含重连轮询逻辑）
				}
			});
			// IM

		},
		onShow: async function(query) {

			//先关闭ws，烦人
			return false;
			// IM
			//登录状态检查与页面刷新控制
			if (query.path != 'pages/common/center/login' && query.path != 'pages/common/center/register') {
				this.ws.pageRefresh.message = true
				this.ws.pageRefresh.sessionInfo = true
				this.checkLogin()
				//如果当前页面 不是登录页或注册页，则：

				//标记需要刷新消息列表和会话信息（pageRefresh）。

				//调用 checkLogin() 检查用户登录状态（未登录可能跳转到登录页）
			}
			// IM
			var lifeData = {};
			//从本地缓存读取 lifeData（可能是用户社区资料或配置）。

			//将数据存入 Vuex 的 community 模块（通过 setInfo mutation）。
			try {
				lifeData = uni.getStorageSync('lifeData')
				this.$store.commit('community/setInfo', lifeData)
			} catch (e) {

			}
			// 启动或重启即时通讯
			this.$store.dispatch('chat/connectSocket');
			let res = await this.$api.getConfig();
			if (!res.code) {
				this.$u.toast(res.msg);
				return;
			}
			//主题做缓存
			let theme_key = md5Libs.md5(JSON.stringify(res.data.theme));
			this.$u.vuex('vuex_theme', {
				key: theme_key,
				value: res.data.theme
			});
			this.$u.vuex('vuex_config', res.data);
		},
		onHide() {
			// 断开即时通讯
			this.$store.dispatch('chat/close');
		},
		beforeDestroy() {
			clearInterval(this.timer)
			this.timer = null
		},
		methods: {
			watch(methos, istr) { //方法；值
				let obj = this.globalData;
				let info = '';
				//Object.defineProperty()方法，会直接在一个对象上定义一个新属性，或者修改一个对象的现有属性， 并返回这个对象 Object.defineProperty(obj, istr, {
				Object.defineProperty(obj, istr, {
					// value:"hello", // 属性对应的值，默认为 undefined
					// writable:false, // 默认为 false，表示只读，无法给该属性赋值。在严格模式中，给只读属性赋值会报错。宽松模式中，给只读属性赋值不会生效
					enumerable: true, // 目标属性是否可以被枚举。true | false（使用for...in或Object.keys()）
					configurable: true, // 目标属性是否可以被删除或是否可以再次修改特性 true | false
					set: function(value) { //当设置值的时候触发的函数,设置的新值通过参数value拿到
						this._consumerGoodsStatus = value
						methos(value)
						info = value;
					},
					get: function(value) {
						return this._consumerGoodsStatus
					}
				});
			},
			// connect() {
			// 	socketID = uni.connectSocket({
			// 		url: 'ws://47.115.43.235:2340', //仅为示例，并非真实接口地址。
			// 		success: () => {
			// 			//console.log('连接成功');
			// 		}
			// 	});
			// 	socketID.onOpen(() => {
			// 		let _this = this
			// 		this.timer = setInterval(() => {
			// 			this.amapPlugin.getRegeo({
			// 				success: (data) => {
			// 					_this.$
			// 					if (_this.$store.state.token && _this.$store.state.userInfo
			// 						.real_verified == 1 && _this.$store.state.userInfo
			// 						.driver_verified == 1) {
			// 						let addr = [_this.$store.state.userInfo.user_id, _this
			// 							.$store.state.userInfo.truename, data[0].latitude,
			// 							data[0].longitude, _this.$store.state.userInfo
			// 							.driver_status
			// 						]
			// 						console.log(addr);
			// 						socketID.send({
			// 							data: addr.join(',')
			// 						})
			// 					}
			// 				}
			// 			});
			// 		}, 4000)
			// 	});

			// 	socketID.onClose(() => {
			// 		//this.connect()
			// 	});
			// 	socketID.onError(() => {
			// 		//this.connect()
			// 	});

			// },
			checkLogin: function() {
				const userinfo = uni.getStorageSync('wanlshop:user').im;
				var valid = true;
				if (!userinfo || !userinfo.token) {
					valid = false;
				} else {
					let token = userinfo.token.split('|');
					let time = Date.parse(new Date()).toString();
					time = time.substr(0, 10);
					// 减去一秒,防止刚好到时间造成发送了错误的请求
					if ((parseInt(token[2]) - 2) < parseInt(time)) {
						valid = false;
					}
				}

				if (!valid) {
					// setTimeout(() => {
					// 	this.ws.logout()
					// }, 300)
					// this.ws.initTourist()//如果用户未登录，开启游客ws
				} else {
					// this.ws.init(userinfo.token, userinfo.auth_token)//如果用户已登录，开启用户ws
					// // 腾讯IM
					// const SDKAppID = 1600081841;  // 接入时需要将0替换为您的即时通信 IM 应用的 SDKAppID
					// const userID = '111'; // 您的 userID
					// const userSig = 'eJwtzEELgjAYxvHvsmthe9emJnSoQAgmGfPYpdyUF2sMtQyj756px*f3wP9DMqm8l6lJRJhHyXLcqI1tscCRAWDmRldX51CTCHxKaQghh*kxb4e1GVwIwYZr0hYffwu48PmGs2CuYDlUk*ch6bNYFgr2MfL7ou8vq-Sk8pvsqjTHtdhBaY-nzrbNlnx-gAMwhw__'; // 用户登录即时通信 IM 的密码，其本质是对 UserID 等信息加密后得到的密文
					// const appKey = ''; // 推送服务 Push 的客户端密钥
					// ﻿
					// // 创建 SDK 实例，`TIM.create()`方法对于同一个 `SDKAppID` 只会返回同一份实例
					// let chat = TencentCloudChat.create({
					//     SDKAppID
					// }); // SDK 实例通常用 chat 表示
					// ﻿
					// chat.setLogLevel(0); // 普通级别，日志量较多，接入时建议使用
					// // chat.setLogLevel(1); // release 级别，SDK 输出关键信息，生产环境时建议使用
					// ﻿
					// // 注册腾讯云即时通信 IM 上传插件
					// chat.registerPlugin({'tim-upload-plugin': TIMUploadPlugin});
					// ﻿
					// // 登录 Chat
					// let promise = chat.login({ userID, userSig });
					// promise.then(function(imResponse) {
					//   console.log(imResponse.data); // 登录成功
					//   if (imResponse.data.repeatLogin === true) {
					//     // 标识账号已登录，本次登录操作为重复登录。
					//     console.log(imResponse.data.errorInfo);
					//   }
					// }).catch(function(imError) {
					//   console.warn('login error:', imError); // 登录失败的相关信息
					// });
					// ﻿
					// // 注意！以下代码适用于 uni-app/react-native -> native app 项目集成推送能力。
					// // 应合规要求，在用户同意隐私协议的前提下，登录成功后 SDK 会通过推送插件获取推送 token
					// // if(Push) {
					// //     // 设置使用 Push 的 userID，需要和 Chat 登录的 userID 保持一致
					// //     Push.setRegistrationID(userID, () => {
					// //     	console.log('Push | setRegistrationID ok');
					// //     });
					// //     // 注册推送服务  
					// // 	Push.registerPush(SDKAppID, appKey, (data) => {
					// //             console.log('Push | registerPush ok', data);
					// //         }, (errCode, errMsg) => {
					// //             console.error('Push | registerPush failed', errCode, errMsg);
					// //         }
					// //     );
					// // }
					// // 腾讯IM
					
				}
			},
		}
	};

	// "<uses-permission android:name=\"android.permission.READ_CONTACTS\"/>",
	// "TRTCCloudUniPlugin-TRTCCloudImpl" : {
	//     "__plugin_info__" : {
	//         "name" : "【官方】腾讯云实时音视频SDK",
	//         "description" : "uni-app TRTC SDK 是腾讯云实时音视频通讯解决方案在 uni-app 上的 SDK，提供实时音视频服务",
	//         "platforms" : "Android,iOS",
	//         "url" : "https://ext.dcloud.net.cn/plugin?id=7774",
	//         "android_package_name" : "",
	//         "ios_bundle_id" : "",
	//         "isCloud" : true,
	//         "bought" : 1,
	//         "pid" : "7774",
	//         "parameters" : {}
	//     }
	// },
</script>

<style lang="scss">
	/* #ifndef APP-NVUE */
	@import 'uview-ui/index.scss';
	@import '@/common/common.scss';

	.user-status-0 {
		color: $--gray !important;
	}

	.user-status-1 {
		color: #21E589 !important;
	}

	.user-status-2 {
		color: #FF647E !important;
	}

	.user-status-3 {
		color: #FF9C4E !important;
	}

	.im-data-none {
		// display: block;
		line-height: 100rpx;
		text-align: center;
		font-size: 28rpx;
		color: $--gray;
	}

	.empty-view {
		margin: auto;
		display: flex;
		align-items: center;
		flex-direction: column;
	}

	/* #endif */
</style>
<style>
	/* #ifndef APP-NVUE */
	@import 'static/other/style/colorui.css';
	@import 'static/other/style/wanlshop.css';
	@import 'static/other/style/iconfont.css';
	@import 'static/other/font/iconfont.css';
	/* #endif */
</style>
